package writtenTraining.day5;

import java.util.*;

/**
 * day5:(1)模拟+贪心：游游的you
 */

public class Main {
    public static void main(String[] args) {
        // 输入
        Scanner in = new Scanner(System.in);
        int k = in.nextInt();

        while(k-- > 0) {
            // 获取到  y  o u
            int[] nums = new int[3];
             
            // 查找最小值
            int min = 0x3f3f3f3f;
            for(int i = 0; i < 3;i++) {
                nums[i] = in.nextInt();
                min = Math.min(min,nums[i]);
            }

            int o = (nums[1] - min - 1) > 0 
            ?  (nums[1] - min - 1) : 0;
            System.out.println( min*2 + o);

        }

    }
}


/**
 * day5:(2)bfs:NC398 腐烂的苹果
 */





 class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param grid int整型ArrayList<ArrayList<>>
     * @return int整型
     */
    public int rotApple (ArrayList<ArrayList<Integer>> grid) {
        // 广搜
        int row = grid.size(), col = grid.get(0).size();
        Queue<int[]> queue = new LinkedList<>();
        int[] dx = {0, 0, -1, 1};
        int[] dy = {-1, 1, 0, 0};

        // 加入队列
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (grid.get(i).get(j) == 2) {
                    queue.add(new int[] {i, j});
                }
            }
        }

        int ret = 0;
        // bfs
        while (!queue.isEmpty()) {
            int sz = queue.size();
            for (int i = 0; i < sz; i++) {
                int[] tmp = queue.poll();
                for (int k = 0; k < 4; k++) {
                    int x = tmp[0] + dx[k];
                    int y = tmp[1] + dy[k];
                    if (x >= 0 && x < row
                            && y >= 0 && y < col
                            && grid.get(x).get(y) == 1) {
                        // 设置苹果已经被腐烂了
                        grid.get(x).set(y, 2);
                        // 进入下一层
                        queue.add(new int[] {x, y});
                    }
                }
            }
            // 记录腐烂时间
            ret++;
        }

        // 判断是否还有完好的苹果
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if (grid.get(i).get(j) == 1) {
                    return -1;
                }
            }
        }
        return ret - 1;
    }
}


/**
 * day5:(3)约瑟夫环+构造循环链表：JZ62 孩子们的游戏(圆圈中最后剩下的数)
 */



 class Solution1 {

    /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     *
     * @param n int整型
     * @param m int整型
     * @return int整型
     */
    public int LastRemaining_Solution (int n, int m) {
        // 约瑟夫环的循环链表构造
        // 1. 构造循环链表
        ListNode head = new ListNode(0);
        ListNode cur = head;
        for(int i = 1; i < n; i++) {
            ListNode node = new ListNode(i);
            cur.next = node;
            cur = cur.next;
        }
        cur.next = head;


        // 2. 删除结点, 直到最终指向自己
        ListNode prev = cur;
        cur = head;
        while(cur.next != cur) {
            // 开始数数
            for(int i = 1; i < m; i++) {
                prev = cur;
                cur = cur.next;
            }
            System.out.print(cur.val);
            // 删除 m - 1的结点
            prev.next = cur.next;
            // 跳转到下一个结点从新开始计算
            cur = cur.next;
        }




        return cur.val;
    }
}


class ListNode{
    public int val;
    public ListNode next;
    public ListNode(int val) {
        this.val = val;
    }
}